class Solution {
public:
    char firstUniqChar(string s) {
        /*
        直接法:依次判断每一个字符是否只出现过一次(时间复杂度与空间复杂度过高)
        */
        int sizeOfS = s.size();
        vector<bool> isCounted(sizeOfS, false);
        int sptr = 0;
        char result = ' ';
        while(sptr <sizeOfS)
        {
            if(!isCounted[sptr])
            {
                //该字符没有被遍历过
                isCounted[sptr] = true;
                bool findResult = true;
                for(int i = sptr + 1; i < sizeOfS; ++i)
                {
                    if(isCounted[i])  continue;
                    if(s[i] == s[sptr])
                    {
                        isCounted[i] = true;
                        if(findResult)  findResult = false;
                    }
                }
                if(findResult)
                {
                    result = s[sptr];
                    break;
                }
            }
            ++sptr;
        }

        return result;
    }
};

/**********************************************************************************/
class Solution {
public:
    char firstUniqChar(string s) {
        /*
        哈希查找：将所有字符依次放入哈希表中，然后查看哪些是只出现过一次的
        */
        int sizeOfS = s.size();
        char result = ' ';
        unordered_map<char, int> um;
        for(int i = 0; i < sizeOfS; ++i)  ++um[s[i]];

        for(int i = 0; i < sizeOfS; ++i)
        {
            if(um[s[i]] == 1)
            {
                result = s[i];
                break;
            }
        }

        return result;
    }
};

/*******************************************************************************/
class Solution {
public:
    char firstUniqChar(string s) {
        /*
        哈希查找：将所有字符依次放入哈希表中，然后查看哪些是只出现过一次的;
        自创简易哈希表:使用字符ASCII值为下标，以字符出现次数为值，创建一个简易哈希数组用以表示哈希表
        */
        int sizeOfS = s.size();
        char result = ' ';
        vector<int> hashMap(26,0);
        for(int i = 0; i < sizeOfS; ++i)  ++hashMap[s[i] - 'a'];

        for(int i = 0; i < sizeOfS; ++i)
        {
            if(hashMap[s[i] - 'a'] == 1)
            {
                result = s[i];
                break;
            }
        }

        return result;
    }
};

/*************************************************************************************/
class Solution {
public:
    char firstUniqChar(string s) {
        /*
        哈希查找：将所有字符依次放入哈希表中，然后查看哪些是只出现过一次的;
        自创简易哈希表2:使用字符ASCII值为下标，以字符出现次数为值，创建一个简易哈希数组用以表示哈希表;
        由于char数据类型为8位，共有256中可能，因此需要创建256位数组
        */
        int sizeOfS = s.size();
        char result = ' ';
        vector<int> hashMap(256,0);
        for(int i = 0; i < sizeOfS; ++i)  ++hashMap[s[i]];

        for(int i = 0; i < sizeOfS; ++i)
        {
            if(hashMap[s[i]] == 1)
            {
                result = s[i];
                break;
            }
        }

        return result;
    }
};